/**
 * 提供一些数字信号处理上常见的窗函数。
 * 利用这里提供的函数可以对输入的数字信号进行加窗处理。
 * 计算结果写回到输入的数组里，因此如果原始的数字信号还有其他用途，函数调用者需自行拷贝保留。
 */

#include <math.h>
/**
 * Bartlett
 */
void BartlettWin(double buf[], int N)
{
    int n = 0;
    for(n = 0; n < N; n++)
    {
        buf[n] *= (1.0 - fabs(2.0 * n / N - 1.0));
    }
}

void HanningWin(double buf[], int N)
{
    int n = 0;
    for(n = 0; n < N; n++)
    {
        buf[n] *= (1.0 - cos(2.0 * M_PI * n / N)) / 2.0;
    }
}
void HammingWin(double buf[], int N)
{
    int n = 0;
    for(n = 0; n < N; n++)
    {
        buf[n] *= (0.54 - 0.46 * cos(2.0 * M_PI * n / N));
    }
}

void BlackmanWin(double buf[], int N)
{
    int n = 0;
    for(n = 0; n < N; n++)
    {
        buf[n] *= (0.42 - 0.5 * cos(2.0 * M_PI * n / N) + 0.08 *cos(4.0 * M_PI * n / N));
    }
}
